/*===============================================
	要完成四个功能：
	1. 已知坐标点，定位到图上		[ok]
	2. 已知坐标点，获取当前地理位置	[ok]
	3. 已知地理位置，获取实际坐标点	[ok]	
		<两种方式: 需要mark点,不需要mark点>
===============================================*/

/*===============================================
	MapABC坐标的明码与密码的转换
===============================================*/
var __keys__ = [[0, 2, 1, 2, 8, 9, 4, 1, 7, 2, 5, 3, 9], [0, 3, 2, 2, 9, 5, 8, 2, 6, 8, 4, 6, 3], [1, 5, 2, 7, 1, 4, 7, 2, 4, 1, 4, 3, 0], [0, 7, 8, 3, 4, 9, 0, 6, 7, 7, 4, 4, 2], [0, 2, 1, 8, 4, 9, 3, 2, 3, 1, 5, 7, 8], [0, 0, 9, 5, 4, 7, 3, 0, 8, 7, 5, 2, 8], [0, 1, 5, 1, 1, 8, 2, 7, 1, 9, 1, 3, 5], [0, 5, 2, 5, 6, 0, 3, 4, 6, 7, 1, 3, 5], [1, 3, 2, 1, 8, 1, 8, 3, 7, 9, 2, 7, 0], [1, 2, 7, 7, 4, 3, 1, 5, 5, 0, 6, 4, 4], [1, 5, 2, 8, 9, 2, 5, 9, 6, 7, 3, 3, 5], [1, 7, 9, 4, 5, 0, 9, 4, 9, 6, 1, 9, 9], [0, 6, 8, 3, 3, 6, 3, 5, 2, 0, 0, 9, 1], [1, 1, 1, 4, 7, 8, 6, 9, 6, 8, 8, 4, 6], [0, 5, 2, 1, 2, 5, 7, 0, 0, 4, 7, 4, 1], [0, 7, 6, 4, 2, 3, 9, 0, 7, 8, 5, 6, 7], [0, 1, 7, 6, 0, 5, 4, 7, 6, 7, 7, 5, 7], [0, 5, 2, 9, 8, 1, 7, 8, 3, 8, 5, 4, 5], [0, 4, 3, 1, 2, 8, 3, 7, 0, 9, 4, 8, 8], [1, 0, 6, 7, 9, 4, 3, 5, 2, 9, 8, 7, 7], [1, 6, 4, 4, 6, 7, 1, 4, 4, 2, 6, 7, 5], [0, 8, 1, 7, 7, 5, 2, 6, 4, 3, 9, 7, 5], [1, 7, 0, 5, 6, 2, 5, 2, 7, 4, 6, 2, 8], [0, 4, 9, 2, 3, 0, 5, 4, 7, 8, 7, 0, 5], [1, 1, 0, 5, 1, 7, 2, 8, 7, 2, 6, 9, 3], [1, 4, 2, 3, 6, 1, 5, 3, 2, 0, 3, 6, 2], [1, 1, 6, 5, 1, 0, 6, 8, 9, 7, 1, 7, 9], [0, 6, 5, 4, 0, 7, 1, 7, 6, 2, 5, 4, 2], [1, 9, 8, 6, 6, 6, 8, 4, 5, 4, 0, 4, 0], [1, 2, 7, 1, 5, 0, 6, 8, 0, 1, 3, 7, 9], [1, 1, 6, 4, 9, 8, 6, 0, 6, 2, 1, 9, 8], [0, 0, 1, 9, 5, 3, 3, 9, 6, 7, 4, 1, 1], [0, 2, 8, 5, 7, 8, 6, 7, 3, 3, 1, 6, 4], [1, 8, 2, 5, 8, 4, 7, 6, 8, 8, 5, 7, 6], [0, 8, 3, 4, 9, 6, 1, 7, 8, 3, 0, 5, 5], [1, 3, 2, 6, 7, 4, 2, 8, 7, 4, 9, 6, 8], [1, 8, 8, 9, 3, 9, 1, 8, 5, 7, 2, 5, 0], [0, 5, 8, 3, 1, 8, 8, 0, 3, 9, 3, 8, 1], [1, 6, 0, 1, 1, 0, 3, 4, 3, 3, 3, 5, 9], [1, 0, 5, 1, 7, 9, 6, 2, 4, 6, 0, 3, 5], [1, 8, 2, 0, 9, 7, 1, 0, 5, 5, 8, 0, 6], [1, 8, 9, 6, 7, 3, 9, 4, 1, 9, 6, 6, 2], [0, 6, 0, 0, 8, 2, 6, 5, 9, 4, 1, 6, 2], [1, 7, 9, 7, 9, 4, 4, 2, 1, 1, 5, 7, 4], [1, 3, 0, 4, 3, 4, 6, 8, 6, 9, 1, 7, 0], [0, 1, 2, 3, 9, 4, 1, 8, 7, 2, 2, 9, 8], [1, 6, 5, 3, 2, 7, 6, 6, 9, 0, 0, 7, 7], [1, 6, 8, 4, 9, 7, 8, 0, 3, 6, 5, 4, 8], [0, 6, 6, 0, 9, 9, 4, 5, 5, 6, 8, 3, 7], [1, 0, 1, 3, 4, 0, 0, 1, 4, 8, 5, 7, 0], [1, 0, 2, 5, 8, 2, 2, 4, 8, 9, 7, 1, 6], [1, 4, 2, 6, 6, 8, 4, 5, 6, 6, 4, 5, 9], [1, 4, 4, 1, 7, 2, 0, 4, 6, 3, 3, 6, 7], [0, 2, 2, 3, 8, 0, 0, 8, 6, 0, 2, 1, 7], [0, 9, 4, 4, 8, 1, 2, 7, 3, 2, 6, 8, 0], [0, 9, 8, 4, 2, 1, 4, 5, 2, 4, 9, 5, 1], [0, 7, 2, 4, 7, 4, 3, 2, 4, 1, 5, 6, 9], [1, 1, 8, 4, 8, 8, 8, 4, 3, 4, 1, 2, 5], [0, 3, 2, 7, 5, 7, 0, 2, 7, 4, 5, 3, 5], [0, 3, 0, 4, 6, 6, 6, 5, 7, 2, 1, 9, 5], [1, 5, 6, 0, 1, 3, 2, 7, 3, 0, 9, 8, 6], [0, 5, 5, 1, 7, 1, 0, 7, 9, 0, 3, 5, 7], [0, 5, 4, 9, 7, 9, 7, 3, 8, 0, 1, 6, 3], [1, 9, 2, 7, 3, 7, 9, 4, 3, 9, 8, 8, 2], [0, 3, 1, 8, 9, 0, 9, 0, 4, 5, 5, 0, 9], [1, 8, 6, 1, 7, 7, 2, 4, 7, 9, 2, 0, 8], [0, 6, 1, 2, 7, 1, 4, 8, 4, 1, 1, 6, 0], [0, 3, 9, 8, 5, 5, 3, 0, 8, 7, 9, 3, 5], [0, 8, 4, 3, 7, 3, 1, 8, 2, 9, 1, 4, 7], [0, 1, 5, 3, 4, 0, 5, 5, 5, 8, 0, 7, 2], [0, 1, 7, 1, 8, 2, 1, 9, 8, 6, 1, 7, 0], [0, 7, 1, 6, 9, 7, 2, 7, 2, 4, 4, 3, 6], [0, 6, 2, 7, 2, 3, 4, 9, 3, 0, 1, 6, 3], [0, 2, 9, 1, 9, 9, 9, 1, 9, 5, 4, 4, 4], [0, 1, 8, 7, 0, 0, 5, 2, 1, 5, 7, 4, 6], [1, 9, 0, 8, 7, 3, 3, 5, 5, 4, 9, 0, 1], [1, 5, 8, 0, 1, 7, 0, 2, 3, 7, 3, 2, 9], [1, 3, 2, 0, 5, 2, 7, 5, 0, 2, 6, 8, 1], [0, 2, 7, 2, 3, 2, 2, 9, 6, 9, 4, 1, 6], [1, 6, 4, 7, 9, 6, 5, 9, 5, 8, 2, 7, 1], [1, 8, 1, 2, 6, 0, 2, 4, 0, 8, 0, 1, 6], [1, 6, 2, 4, 1, 2, 4, 1, 7, 2, 7, 0, 6], [0, 1, 8, 0, 5, 0, 4, 5, 5, 1, 0, 4, 7], [0, 8, 7, 6, 4, 3, 5, 5, 7, 8, 4, 9, 0], [0, 2, 7, 7, 0, 1, 6, 6, 1, 0, 9, 3, 5], [0, 7, 6, 9, 8, 3, 8, 6, 2, 9, 3, 7, 0], [1, 6, 6, 6, 0, 3, 0, 1, 0, 2, 5, 6, 1], [0, 0, 4, 5, 1, 0, 9, 4, 4, 9, 4, 0, 9], [0, 1, 6, 9, 4, 7, 5, 7, 8, 3, 5, 7, 0], [1, 2, 7, 1, 6, 6, 1, 5, 2, 8, 6, 3, 8], [1, 9, 1, 6, 7, 5, 1, 7, 4, 7, 6, 1, 8], [1, 7, 6, 7, 0, 2, 9, 6, 9, 8, 6, 7, 8], [0, 9, 8, 7, 3, 8, 1, 5, 2, 5, 2, 7, 5], [0, 7, 3, 5, 7, 9, 7, 6, 6, 9, 1, 7, 5], [1, 6, 7, 3, 4, 4, 7, 6, 2, 6, 6, 2, 3], [0, 1, 4, 2, 2, 8, 5, 0, 9, 2, 7, 3, 1], [0, 1, 4, 2, 1, 0, 0, 2, 1, 8, 9, 8, 3], [1, 7, 0, 8, 7, 9, 9, 6, 4, 8, 6, 2, 2], [1, 9, 3, 9, 9, 8, 7, 0, 8, 1, 1, 7, 3], [1, 0, 4, 3, 5, 8, 0, 4, 6, 5, 4, 5, 8], [0, 4, 8, 0, 5, 2, 3, 2, 3, 9, 4, 2, 3], [0, 7, 9, 0, 9, 7, 2, 7, 7, 0, 4, 8, 5], [1, 6, 5, 5, 3, 3, 2, 6, 1, 3, 4, 7, 1], [0, 2, 9, 0, 0, 2, 9, 1, 8, 8, 2, 8, 4], [1, 3, 2, 5, 0, 6, 2, 5, 3, 3, 6, 1, 1], [1, 9, 2, 9, 3, 3, 8, 9, 9, 7, 2, 3, 7], [1, 1, 8, 4, 0, 8, 2, 4, 8, 0, 0, 9, 2], [1, 5, 2, 6, 0, 6, 1, 3, 0, 4, 7, 3, 8], [1, 9, 3, 8, 1, 1, 7, 8, 6, 9, 0, 6, 8], [1, 3, 2, 7, 7, 2, 2, 4, 2, 5, 8, 3, 0], [1, 1, 1, 0, 7, 7, 3, 4, 7, 3, 6, 6, 8], [0, 9, 4, 2, 8, 9, 4, 8, 4, 3, 2, 5, 3], [0, 1, 0, 9, 2, 7, 2, 3, 9, 4, 5, 0, 8], [1, 0, 4, 5, 8, 4, 0, 0, 5, 2, 2, 1, 2], [0, 5, 0, 4, 5, 3, 2, 5, 4, 1, 3, 6, 9], [1, 3, 0, 2, 7, 8, 1, 7, 7, 3, 5, 5, 9], [1, 3, 7, 0, 0, 5, 8, 1, 7, 5, 6, 5, 2], [1, 8, 1, 9, 9, 9, 4, 8, 6, 0, 7, 7, 3], [0, 8, 3, 6, 2, 7, 4, 2, 1, 9, 1, 6, 8], [0, 4, 4, 4, 2, 6, 0, 4, 0, 1, 5, 1, 7], [1, 2, 7, 4, 7, 6, 6, 6, 3, 7, 7, 2, 9], [0, 9, 8, 9, 3, 3, 3, 9, 0, 7, 4, 2, 3], [0, 7, 6, 0, 9, 1, 7, 2, 4, 5, 8, 3, 3], [1, 6, 1, 5, 5, 3, 1, 3, 2, 1, 0, 5, 6], [0, 6, 2, 4, 1, 6, 6, 3, 4, 9, 2, 7, 0], [1, 6, 3, 2, 3, 6, 1, 7, 7, 5, 6, 7, 1], [1, 0, 4, 9, 2, 3, 3, 6, 2, 6, 9, 3, 2], [0, 3, 7, 3, 9, 1, 3, 9, 5, 8, 5, 8, 9], [1, 9, 0, 0, 3, 0, 9, 1, 2, 7, 8, 0, 3], [1, 0, 1, 2, 7, 7, 0, 0, 1, 8, 4, 1, 1], [0, 0, 5, 5, 9, 6, 9, 8, 1, 2, 1, 7, 2], [0, 1, 8, 7, 9, 0, 3, 5, 6, 3, 2, 9, 4], [1, 3, 1, 5, 7, 5, 0, 8, 5, 3, 2, 5, 0], [1, 1, 7, 3, 5, 0, 7, 7, 9, 6, 8, 9, 0], [0, 7, 7, 0, 9, 4, 2, 8, 8, 0, 2, 2, 0], [1, 6, 5, 8, 3, 1, 0, 9, 0, 2, 7, 2, 9], [1, 3, 5, 8, 4, 7, 6, 3, 1, 4, 3, 4, 7], [0, 8, 8, 7, 8, 2, 7, 0, 3, 9, 6, 2, 9], [1, 1, 6, 2, 6, 7, 5, 2, 5, 0, 8, 5, 5], [0, 9, 6, 7, 3, 0, 2, 3, 9, 5, 3, 7, 4], [1, 5, 2, 7, 3, 6, 0, 8, 3, 3, 9, 0, 3], [0, 3, 6, 8, 9, 1, 7, 7, 3, 8, 7, 3, 8], [0, 1, 2, 5, 4, 9, 8, 0, 3, 6, 4, 0, 4], [1, 2, 4, 1, 6, 8, 1, 5, 8, 3, 6, 4, 3], [1, 9, 3, 1, 0, 8, 4, 4, 0, 1, 6, 0, 8], [0, 4, 5, 1, 0, 2, 1, 7, 1, 6, 1, 3, 3], [0, 9, 5, 6, 8, 2, 2, 4, 0, 3, 9, 8, 1], [1, 9, 3, 5, 4, 3, 1, 2, 2, 2, 0, 8, 7], [0, 5, 6, 8, 1, 5, 7, 7, 8, 9, 4, 0, 6], [1, 0, 4, 6, 4, 6, 7, 4, 6, 0, 3, 6, 2], [1, 3, 3, 0, 2, 5, 3, 1, 9, 2, 3, 6, 8], [0, 6, 9, 6, 3, 6, 9, 6, 2, 1, 5, 0, 7], [1, 6, 5, 3, 0, 0, 0, 6, 2, 3, 8, 6, 0], [1, 0, 7, 1, 2, 0, 3, 0, 3, 0, 8, 8, 0], [0, 7, 1, 4, 3, 1, 8, 6, 7, 8, 1, 5, 4], [0, 6, 3, 5, 5, 4, 8, 9, 4, 8, 3, 1, 7], [0, 6, 4, 3, 1, 0, 7, 2, 9, 0, 5, 6, 7], [0, 6, 3, 7, 7, 0, 6, 8, 6, 7, 4, 6, 0], [0, 4, 2, 7, 2, 4, 1, 4, 6, 1, 8, 1, 7], [1, 1, 7, 9, 0, 7, 0, 5, 1, 8, 6, 3, 5], [1, 2, 0, 2, 7, 2, 7, 9, 1, 2, 7, 0, 3], [0, 3, 3, 6, 2, 0, 9, 1, 1, 0, 3, 5, 8], [1, 4, 0, 9, 9, 2, 5, 6, 5, 6, 8, 0, 5], [0, 3, 5, 3, 3, 3, 4, 6, 7, 5, 7, 0, 5], [0, 5, 8, 8, 5, 8, 5, 4, 7, 0, 5, 7, 3], [0, 5, 0, 7, 6, 4, 2, 7, 8, 3, 6, 1, 4], [0, 4, 7, 8, 6, 5, 3, 7, 7, 5, 7, 0, 7], [1, 3, 6, 5, 3, 0, 8, 5, 4, 9, 7, 7, 1], [1, 4, 8, 2, 8, 2, 8, 3, 4, 9, 4, 6, 7], [1, 4, 1, 6, 9, 4, 5, 7, 7, 4, 6, 7, 7], [0, 2, 8, 2, 3, 0, 7, 7, 1, 0, 1, 1, 0], [1, 2, 2, 4, 5, 4, 7, 1, 0, 1, 8, 6, 7], [0, 0, 7, 2, 4, 7, 2, 8, 2, 4, 4, 3, 9], [1, 9, 1, 3, 2, 4, 1, 3, 3, 7, 5, 6, 1], [1, 4, 7, 4, 6, 8, 6, 7, 4, 4, 1, 2, 8], [0, 1, 6, 7, 3, 9, 0, 4, 7, 2, 9, 6, 7], [0, 1, 3, 9, 1, 1, 1, 1, 6, 3, 0, 1, 1], [1, 2, 7, 0, 2, 0, 7, 9, 7, 2, 1, 5, 2], [0, 9, 1, 0, 4, 2, 8, 2, 2, 4, 2, 4, 0], [1, 1, 7, 9, 7, 9, 3, 0, 5, 3, 4, 5, 2], [0, 0, 7, 4, 3, 0, 8, 6, 7, 7, 7, 9, 6], [0, 7, 0, 4, 0, 6, 7, 6, 3, 2, 0, 7, 1], [0, 4, 8, 8, 0, 5, 3, 0, 7, 8, 4, 7, 9], [0, 6, 3, 3, 3, 6, 6, 3, 7, 0, 4, 8, 3], [0, 1, 2, 0, 6, 0, 3, 1, 0, 9, 9, 8, 0], [0, 7, 0, 3, 8, 2, 5, 0, 7, 5, 0, 0, 4], [1, 8, 8, 8, 2, 0, 6, 2, 5, 6, 2, 3, 2], [1, 6, 2, 5, 8, 0, 1, 9, 7, 3, 7, 6, 0], [0, 3, 6, 1, 9, 1, 6, 8, 2, 6, 5, 2, 5], [0, 3, 9, 7, 8, 9, 4, 5, 4, 8, 5, 5, 1], [1, 1, 5, 5, 2, 5, 3, 4, 5, 3, 5, 0, 9], [1, 0, 9, 4, 9, 6, 1, 7, 0, 0, 6, 0, 1], [0, 8, 4, 9, 9, 9, 3, 4, 1, 3, 5, 7, 7], [0, 7, 8, 0, 0, 3, 5, 5, 9, 4, 1, 8, 1], [1, 7, 3, 7, 6, 3, 2, 5, 6, 2, 7, 5, 0], [0, 0, 2, 6, 0, 6, 6, 2, 7, 6, 1, 6, 2], [1, 1, 6, 4, 7, 7, 9, 7, 0, 6, 2, 6, 6], [0, 2, 1, 1, 4, 7, 6, 8, 8, 8, 9, 4, 3], [0, 0, 8, 7, 5, 1, 9, 3, 1, 9, 8, 6, 0], [0, 3, 4, 4, 0, 7, 1, 8, 7, 2, 7, 9, 9], [1, 0, 4, 5, 3, 6, 0, 6, 6, 6, 4, 1, 5], [0, 9, 7, 9, 9, 5, 9, 2, 3, 0, 4, 6, 2], [1, 6, 5, 2, 7, 2, 1, 3, 5, 2, 5, 2, 1], [1, 9, 9, 4, 8, 6, 3, 7, 8, 3, 3, 0, 6], [0, 8, 2, 6, 6, 7, 8, 2, 1, 3, 2, 9, 2], [0, 4, 8, 1, 9, 2, 4, 8, 4, 5, 4, 6, 4], [1, 1, 7, 0, 7, 3, 5, 1, 4, 9, 5, 3, 1], [1, 7, 8, 8, 3, 5, 3, 1, 5, 7, 6, 1, 9], [1, 4, 5, 6, 5, 3, 2, 5, 3, 0, 3, 5, 5], [0, 0, 2, 1, 3, 8, 9, 1, 0, 9, 7, 6, 7], [0, 0, 7, 6, 1, 9, 1, 9, 5, 8, 9, 4, 0], [1, 5, 4, 4, 6, 8, 7, 3, 9, 9, 0, 7, 4], [1, 3, 0, 4, 8, 1, 2, 3, 9, 7, 1, 9, 5], [1, 2, 6, 1, 4, 6, 9, 4, 7, 1, 1, 2, 6], [0, 1, 6, 7, 5, 8, 3, 2, 7, 0, 4, 1, 1], [1, 6, 2, 7, 8, 7, 6, 8, 7, 2, 0, 3, 3], [0, 2, 1, 9, 2, 6, 7, 5, 9, 5, 2, 2, 2], [0, 5, 2, 0, 4, 7, 7, 3, 8, 1, 5, 0, 9], [1, 6, 5, 8, 6, 4, 0, 9, 6, 9, 0, 1, 8], [1, 2, 0, 8, 7, 9, 2, 4, 4, 0, 9, 8, 9], [1, 6, 5, 2, 0, 6, 1, 0, 4, 4, 1, 5, 8], [1, 5, 4, 2, 5, 6, 2, 5, 6, 2, 2, 9, 5], [1, 6, 9, 7, 2, 5, 1, 0, 6, 9, 1, 8, 1], [0, 0, 3, 9, 9, 0, 6, 7, 9, 5, 7, 4, 6], [1, 5, 8, 9, 9, 0, 6, 7, 9, 7, 9, 6, 1], [1, 3, 6, 4, 6, 3, 6, 8, 4, 5, 2, 8, 3], [0, 7, 4, 8, 4, 9, 7, 8, 0, 0, 1, 2, 2], [0, 4, 2, 9, 1, 3, 8, 8, 3, 0, 0, 9, 8], [1, 9, 0, 9, 2, 1, 2, 9, 3, 6, 5, 3, 2], [1, 1, 0, 2, 0, 5, 9, 9, 5, 4, 7, 8, 9], [1, 6, 0, 5, 9, 9, 1, 9, 0, 5, 4, 7, 1], [1, 0, 4, 0, 0, 3, 2, 4, 1, 6, 4, 6, 5], [1, 7, 3, 7, 3, 3, 7, 6, 1, 7, 7, 8, 6], [0, 9, 1, 7, 3, 5, 1, 8, 9, 3, 8, 6, 2], [1, 4, 9, 9, 3, 7, 5, 4, 4, 4, 4, 4, 0], [0, 3, 7, 7, 4, 3, 6, 1, 1, 3, 5, 1, 6], [0, 8, 5, 4, 3, 9, 3, 3, 1, 3, 4, 8, 1], [1, 6, 1, 9, 4, 6, 4, 6, 4, 5, 2, 1, 5], [1, 1, 1, 6, 8, 3, 9, 1, 1, 3, 0, 9, 9], [0, 5, 1, 6, 8, 4, 8, 8, 2, 4, 4, 9, 2], [0, 2, 3, 0, 1, 4, 2, 7, 1, 9, 9, 0, 6], [0, 8, 4, 2, 5, 1, 4, 9, 5, 2, 0, 4, 3], [0, 9, 1, 2, 5, 0, 6, 6, 5, 0, 3, 1, 8], [1, 7, 8, 7, 1, 7, 4, 6, 3, 3, 3, 3, 9], [0, 3, 7, 2, 9, 4, 1, 5, 4, 7, 2, 1, 0], [1, 2, 8, 1, 1, 6, 4, 7, 8, 2, 0, 5, 2], [1, 8, 3, 5, 4, 8, 0, 9, 7, 8, 0, 1, 8], [1, 7, 9, 9, 0, 4, 5, 7, 2, 9, 0, 1, 9], [0, 6, 6, 5, 6, 7, 0, 4, 0, 7, 8, 5, 1], [0, 6, 0, 6, 3, 1, 1, 5, 0, 9, 2, 2, 3], [1, 6, 3, 5, 6, 7, 1, 6, 6, 9, 7, 4, 9], [0, 9, 5, 9, 8, 2, 4, 3, 3, 2, 3, 5, 6], [0, 1, 6, 3, 8, 9, 9, 2, 8, 2, 5, 8, 6], [1, 4, 7, 6, 6, 5, 7, 3, 3, 3, 4, 1, 1], [1, 8, 2, 9, 0, 3, 8, 6, 8, 3, 3, 7, 3], [0, 2, 8, 4, 8, 5, 4, 8, 9, 5, 0, 5, 7]];
function getDecodeCoordinate(enLonLat) 
{
	if(typeof(enLonLat) == "number")
		return enLonLat;

	if(enLonLat.length==0)
		return enLonLat;
	var first=enLonLat.substr(0,1);
	if  (first>= "0" && first<= "9") 
		return enLonLat;

	//取编码坐标的后4位字符
	var last4cha = enLonLat.substring(enLonLat.length - 4, enLonLat.length);
	//将后4位字符转成对应的ASCII值
	var last4asc = [];
	for (var i = 0; i < last4cha.length; i++) 
	{
		last4asc.push(last4cha.charCodeAt(i));
	}
	//取4个数值的后两位，组成一个新的8位数字，代表key所在的索引值
	var keyposition = 0;
	keyposition |= last4asc[0] & 3;
	keyposition |= (last4asc[1] & 3) << 2;
	keyposition |= (last4asc[2] & 3) << 4;
	keyposition |= (last4asc[3] & 3) << 6;
	//根据索引值取对应的key，key是一个长度为13的数组
	var keys = __keys__[keyposition];
	//取编码坐标的去掉最后4位的所有字符
	var lonlat = enLonLat.substring(0, enLonLat.length - 4);
	//将所有字符转成对应的ASCII值
	var lonlatasc = [];
	for (var i = 0; i < lonlat.length; i++) 
	{
		lonlatasc.push(lonlat.charCodeAt(i));
	}
	//根据key的第一位。。。
	var key1 = keys[0];
	var fixed = 0;
	switch (key1) 
	{
	  case 0:	fixed = 23;	break;
	  case 1:	fixed = 53;	break;
	}

	//将所有的asc值进行处理
	for (var i = 0; i < lonlatasc.length; i++) 
	{
		lonlatasc[i] -= fixed;
		lonlatasc[i] -= keys[i + 1];
	}

	//将处理后的asc值转成对应的asc码
	var lonlatcha = [];
	for (var j = 0; j < lonlatasc.length; j++) 
	{
		lonlatcha.push(String.fromCharCode(lonlatasc[j]));
	}
	var deLonLat = lonlatcha.join("");
	return deLonLat;
}

function getEncodeCoordinate(MrY) 
{
	var xGH = 256;
	var AaZ = __keys__;
	var AtF = 13;
	var Cwv = parseInt(Math.random() * xGH);
	var FEf = AaZ[Cwv];
	var wcW = "" + MrY;
	var UZO = new Array();
	for (var i = 0; i < wcW.length; i++) 
	{
		UZO.push(wcW.charCodeAt(i));
	}
	var InJ = FEf[0];
	var KvR = 0;
	switch (InJ) 
	{
	  case 0:	KvR = 23;	break;
	  case 1:	KvR = 53;	break;
	}
	nHl = UZO.length;
	var i = 0;
	var eag = "";
	for (i = 0; i < UZO.length && i < FEf.length - 2; i++) 
	{
		UZO[i] += (parseInt(FEf[i + 1]) + parseInt(KvR));
		eag += String.fromCharCode(UZO[i]);
	}
	var mhc = new Array(4);
	for (var i = 0; i < mhc.length; i++) 
	{
		mhc[i] = (Math.random() * 10);
		mhc[i] += 70;
		mhc[i] = mhc[i] >> 2;
		mhc[i] = mhc[i] << 2;
	}
	mhc[0] = mhc[0] | Cwv & 3;
	mhc[1] = mhc[1] | (Cwv & 12) >> 2;
	mhc[2] = mhc[2] | (Cwv & 48) >> 4;
	mhc[3] = mhc[3] | (Cwv & 192) >> 6;
	eag += String.fromCharCode(mhc[0], mhc[1], mhc[2], mhc[3]);
	return eag;
}


/*===============================================
				距离测算
===============================================*/
var EARTH_RADIUS = 6378137.0;    //单位M
var PI = Math.PI;    
function getRad(d)
{
	return d*PI/180.0;
}

//算法1:求两点之间的距离(比较粗略，但是MapABC采用此算法)
function getGreatCircleDistance(lng1,lat1,lng2,lat2)
{
	var radLat1 = getRad(lat1);
	var radLat2 = getRad(lat2);
	
	var dy = radLat1 - radLat2;	//a
	var dx = getRad(lng1) - getRad(lng2);	//b
	
	var s = 2*Math.asin(Math.sqrt(Math.pow(Math.sin(dy/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(dx/2),2)));
	s = s*EARTH_RADIUS;
	s = Math.round(s*10000)/10000.0;
			
	return s;
}

//算法2:求两点之间的距离(比较精确)
function getFlatternDistance(lng1,lat1,lng2,lat2)
{
	var f = getRad((lat1 + lat2)/2);
	var g = getRad((lat1 - lat2)/2);
	var l = getRad((lng1 - lng2)/2);

	var sg = Math.sin(g);
	var sl = Math.sin(l);
	var sf = Math.sin(f);

	var s,c,w,r,d,h1,h2;
	var a = EARTH_RADIUS;
	var fl = 1/298.257;

	sg = sg*sg;
	sl = sl*sl;
	sf = sf*sf;

	s = sg*(1-sl) + (1-sf)*sl;
	c = (1-sg)*(1-sl) + sf*sl;

	w = Math.atan(Math.sqrt(s/c));
	r = Math.sqrt(s*c)/w;
	d = 2*w*a;
	h1 = (3*r -1)/2/c;
	h2 = (3*r +1)/2/s;

	return d*(1 + fl*(h1*sf*(1-sg) - h2*(1-sf)*sg));
}

/*===============================================
				MapABC 坐标格式兼容
===============================================*/
var m_oMark = null;
var m_oMap = null;
	
function _isFloat(str)
{
     var re = /^[0-9]+.?[0-9]*$/;   //判断字符串是否为数字
     return re.test(str);
}

function _isInt(str)
{
     var re = /^[1-9]+[0-9]*]*$/;	//判断正整数   
     return re.test(str);
}

//从经纬度转换为指定数字数组
function fromLngLat(oPt)
{
	//将经纬度转换为数字
	function getNumber(v)
	{
		var	rtn;
		var stype = typeof(v);
		if ("number"==stype)
		{
			rtn = v;
		}
		else if ("string"==stype)
		{
			if(_isFloat(v))
			{
				rtn = parseFloat(v);
			}
			else
			{
				rtn = parseFloat(getDecodeCoordinate(v));
			}
		}

		return rtn;
	}

	var	oRtn = [getNumber(oPt.lngX), getNumber(oPt.latY)];
	return oRtn;
}

//chy-check 2013-07-18 获取度为单位的x,y--
function getFloat(x)
{
	var rtn = parseFloat(x);
	if(rtn>180)
		rtn /= 3600;
	
	return rtn;
}
/*	
	获取经纬度，支持格式：
		1)	坐标串数字(逗号分隔)
		2)	加密坐标串(逗号分隔)
		3)	数字坐标数组
		4)	加密坐标数组
		5)	坐标点对象
*/
function getLngLat(oPoint)
{
	var oLngLat;
	if(oPoint instanceof Array)
	{
		if(oPoint.length>1)
		{
			if(_isFloat(oPoint[0]))
				oLngLat = new MLngLat(getFloat(oPoint[0]),getFloat(oPoint[1]),MConstants.COORD_TYPE_OFFSET);
			else
				oLngLat = new MLngLat(oPoint[0],oPoint[1],MConstants.COORD_TYPE_ENCODE);
		}		
	}
	else if(typeof(oPoint)=="string")
	{
		var strSet=oPoint.split(/[,，\s]/gi);
		if(strSet.length>1)
		{
			if(_isFloat(strSet[0]))
				oLngLat = new MLngLat(getFloat(strSet[0]),getFloat(strSet[1]),MConstants.COORD_TYPE_OFFSET);
			else
				oLngLat = new MLngLat(strSet[0],strSet[1],MConstants.COORD_TYPE_ENCODE);
		}
	}
	else if(oPoint instanceof Object)
	{
		oLngLat = oPoint;
	}
	return oLngLat;
}

function getLngLatArray(strCoords)
{
	var strSet = strCoords.split(/[,，\s]/gi);

	var arr = new Array();
	var oPt;
	for(var i=0; i<strSet.length; i+=2)
	{
		oPt = getLngLat([strSet[i],strSet[i+1]]);
		if(oPt)
	　　	arr.push(oPt);
	}

	return arr;
}

function getLngLats(strCoords)
{
	var arr = getLngLatArray(strCoords);
	var oPints = new MLngLats(arr);
	return oPints;
}


/*===============================================
				MapABC Demo
===============================================*/
	//-创建地图-
function CreateMap(idDiv, oPoint) 
{
	var mapoption = new MMapOptions(); 
		mapoption.toolbar = MConstants.ROUND; //设置地图初始化工具条，ROUND:新版圆工具条 
		mapoption.overviewMap = MConstants.HIDE; //设置鹰眼地图的状态，SHOW:显示，HIDE:隐藏（默认） 
		mapoption.scale = MConstants.SHOW; //设置地图初始化比例尺状态，SHOW:显示（默认），HIDE:隐藏。 
		mapoption.zoom = 13;//要加载的地图的缩放级别 
		mapoption.center = getLngLat(oPoint);//要加载的地图的中心点经纬度坐标 
		mapoption.language = MConstants.MAP_CN;//设置地图类型，MAP_CN:中文地图（默认），MAP_EN:英文地图 
		mapoption.fullScreenButton = MConstants.HIDE;//设置是否显示全屏按钮，SHOW:显示（默认），HIDE:隐藏 
		mapoption.centerCross = MConstants.SHOW;//设置是否在地图上显示中心十字,SHOW:显示（默认），HIDE:隐藏 
		mapoption.toolbarPos=new MPoint(20,20); //设置工具条在地图上的显示位置 
		mapoption.mapComButton = MConstants.SHOW_ST;	//MConstants.SHOW_NO;
		mapoption.isQuickInit=true;				//快速出图

    var oMap = new MMap(idDiv, mapoption); //地图初始化 
	return oMap;
}

	//-已知坐标点，标记到图上-
function CreateMark(oMap, oPoint, title, demo)
{  
    var markerOption = new MMarkerOptions(); 
		markerOption.imageUrl="http://code.mapabc.com/images/lan_1.png"; 
		markerOption.picAgent=false; 
		markerOption.imageAlign=MConstants.BOTTOM_CENTER; 
		markerOption.canShowTip= true; 
		markerOption.isEditable = true;//是否可以拖动
		markerOption.isDraggable = true;//是否可以拖动

	function addFlashTip()
	{   	
		var tipOption=new MTipOptions();   
		var fontstyle=new MFontStyle(); 
			fontstyle.size=14; 
			fontstyle.color=0xFF0066; 
			fontstyle.bold=false; 
		var fontstyle1=new MFontStyle(); 
			fontstyle1.size=20; 
			fontstyle1.color=0xFF0066;//内容字体颜色无效 
			fontstyle1.bold=true;   

		tipOption.title=title?title:"我"; 
		tipOption.titleFontStyle=fontstyle; 
		tipOption.content=demo?demo:"这是我！不服？单挑!"; 
		tipOption.contentFontStyle=fontstyle1; 
		tipOption.roundRectSize=20;//tip矩形圆边长度 
		tipOption.tipType=MConstants.FLASH_BUBBLE_TIP; 
		tipOption.hasShadow=true;   

		return tipOption;
	}
	var tipOption = addFlashTip(); 
    markerOption.tipOption = tipOption; 

    var oMark = new MMarker(getLngLat(oPoint), markerOption); 
		oMark.id="marker01"; 
		oMap.addOverlay(oMark, true) ; 

	return oMark;
}

	//-更新mark位置-
function UpdateMarkPnt(oPoint, title, demo) 
{
	m_oMap.removeOverlay(m_oMark);
	m_oMark = CreateMark(m_oMap, oPoint, title, demo);
/*
	if(title)
	{
		m_oMark.option.tipOption.title = title;
		if(demo)
			m_oMark.option.tipOption.content = demo;
		m_oMap.updateOverlay(m_oMark);
	}
	var oNewLat = new MLngLat(oPoint[0],oPoint[1]);
	m_oMap.markerMoveTo(m_oMark.id, oNewLat);
	m_oMap.setCenter(oNewLat);
*/
}

function createPolygon(arr)
{				　　
　　var lineopt = new MAreaStyle();
	　　//多边形的样式
	　　lineopt.borderStyle.alpha = 1; //透明度，默认1，范围0~1 lineopt.borderStyle.color = 0xFF3300; //线颜色，默认黑色
	　　lineopt.borderStyle.thickness = 0.8;  //线粗细度，默认3
	　　//填充色
	　　lineopt.fillStyle.color = 0xFF6600;

	//tip样式
　　var tipOption = new MTipOptions();
	　　tipOption.title="title";
	　　tipOption.content="content";	//tip内容
	　　tipOption.hasShadow= true;		//是否有阴影

　　var areopt = new MAreaOptions();
	　　areopt.areaStyle=lineopt;
		areopt.tipOption=tipOption;
	　　areopt.canShowTip = false;

	var oReg;
	if(arr.length==2)
		oReg = new MRectangle(arr,areopt);
	else
	　　oReg = new MPolygon(arr,areopt);
	return oReg;
}
/*---------------------------------------------
				<<地址定位>>
1) 如果是完整的地址名，到了门牌号的，用新版
2) 如果是什么街，什么路的，用老版的可以定位
---------------------------------------------*/
//根据地址查询,老的方式
function SearchAddress_Old(fnCallback, strAddress, strCityName) 
{
/*
	//-设置查询参数-
	var oAddressParam = new MAddress();
	oAddressParam.setId("0");
	oAddressParam.setCity(strCityName);//"北京"
	oAddressParam.setAddress(strAddress); 
		
	//-开始查询-
	var arr = new Array();
		arr.push(oAddressParam);
	var oSearchObj = new MGeoCode();
		oSearchObj.setCallbackFunction(fnCallback);
		oSearchObj.geocoding(arr);
//*/
}

//根据地址查询,新的方式，strAddress中已经包含了城市名称
function SearchAddress_new(fnCallback, strAddress) 
{
	var opt = new MGeoCodeSearchOptions(); 
	var mls = new MGeoCodeSearch();   
		mls.setCallbackFunction(fnCallback); 
		mls.addressToGeocode(strAddress,opt); 
}

//综合查询，strAddress中没有包含城市名称
function SearchAddress_All(fnCallback, strAddress, strCityName)
{
	if (strAddress == "") 
	{
		alert("请输入地址!");
		return ;
	}

	//-获取地址类型 0: old 1:new -
	function sGetAddressType()
	{
		var type = 0;
		var strLast = strAddress.substr(strAddress.length-1,1);
		if(strLast=='号')
			type = 1;

		return type;
	}

	function cmd_AddressMatch_Callback_old(data) 
	{
		var x = data.getLongitude();
		var y = data.getLatitude();
		var grade = data.getGrade();
		if (grade == "0") 
		{
			alert("对不起,没有找到该地址!");
			return;
		}

		fnCallback(x, y, grade, strAddress);	
	}

	function cmd_AddressMatch_Callback_new(data) 
	{	 
		if(data.error_message != null)
		{
			alert("错误:" + data.error_message);
			return;
		}

		if(data.message!="ok")
		{
			alert("查询失败，网络繁忙!");
			return;
		}

		if(data.count==0)
		{
			alert("没有找到对应数据!");
			return;
		}

		fnCallback(data.list[0].x, data.list[0].y, data.list[0].level, data.list[0].name);
	}

	//var nAddressType=sGetAddressType();
	var nAddressType=sGetAddressType();
	if(nAddressType==0)
	{
		SearchAddress_Old(cmd_AddressMatch_Callback_old, strAddress, strCityName);
	}
	else
	{
		var nPos = strAddress.indexOf("市");
		if(nPos<0 || nPos>4)	//如果没有市,添加当前市缩小范围
		{
			strAddress = strCityName + strAddress;
		}

		SearchAddress_new(cmd_AddressMatch_Callback_new, strAddress);
	}
}


/*---------------------------------------------
				<<坐标查找>>
1) 坐标查找地标
2) 坐标查找类型数据
---------------------------------------------*/
function SearchXzxqName(fnCallback, oPoint)
{
	var poixy = getLngLat(oPoint);
	//-设置查询参数-
	var msso = new MSpatialSearchOptions();
		msso.dataType = "地名地址信息;行政地名;村庄级地名";
		msso.buffer = 10;
		msso.range = 10;
		msso.poiNumber = 1;
		msso.roadLevel = 3;
		msso.sign = 1;  
		
	//-开始查询-
	var oSearchObj = new MSpatialSearch();
		oSearchObj.setCallbackFunction(fnCallback);
		oSearchObj.geocodeToAddress(poixy, msso); 
}

function PoiSearch(fnCallback, city, keyword, oPoint, dataType)
{		
	var poixy = getLngLat(oPoint);
	var opt = new MPoiSearchOptions(); 
		opt.recordsPerPage = 100;	//每页返回数据量，默认为10   
		opt.pageNum = 1;			//当前页数。 
		opt.dataType = dataType?dataType:"";	//数据类别，该处为分词查询，只需要相关行业关键字即可 
		opt.dataSources = MConstants.DS_BASE_ENPOI;//数据源，基础+企业地标数据库（默认） 
		opt.range = 1000;			//查询范围，单位为米，默认值为3000 
		opt.naviFlag = 1;			//周边查询返回结果是否按导航距离排序0,不按导航距离排序（默认）1，按导航距离排序。 

	var MSearch = new MPoiSearch(); 	
	MSearch.setCallbackFunction(fnCallback); 
	MSearch.poiSearchByCenPoi(poixy, keyword, city, opt); 
}

/*---------------------------------------------
				<<范围查找>>
1) 
2) 
---------------------------------------------*/
function RangeSearch(fnCallback, keyword, oPoints, dataType)
{		
	var opt = new MPoiSearchOptions(); 
		opt.recordsPerPage = 200;	//每页返回数据量，默认为10   
		opt.pageNum = 1;			//当前页数。 
		opt.dataType = dataType?dataType:"";	//数据类别，该处为分词查询，只需要相关行业关键字即可 
		opt.dataSources = MConstants.DS_BASE_ENPOI;//数据源，基础+企业地标数据库（默认） 
	
	var MSearch = new MPoiSearch(); 	
	MSearch.setCallbackFunction(fnCallback); 
	MSearch.poiSearchByRegion(MOverlay.TYPE_POLYGON, oPoints, keyword, opt); 
}

/*---------------------------------------------
				<<关键字查找>>
2) 目前指定餐饮服务
---------------------------------------------*/
function KeySearch(funcPoiSearch_Callback, city, keyword, dataType)
{		
	var opt = new MPoiSearchOptions(); 
		opt.recordsPerPage = 200;	//每页返回数据量，默认为10   
		opt.pageNum = 1;			//当前页数。 
		opt.dataType = dataType?dataType:"";	//数据类别，该处为分词查询，只需要相关行业关键字即可 
		opt.dataSources = MConstants.DS_BASE_ENPOI;//数据源，基础+企业地标数据库（默认） 

	var MSearch = new MPoiSearch(); 
	MSearch.setCallbackFunction(funcPoiSearch_Callback); 
	MSearch.poiSearchByKeywords(keyword, city, opt); 
}
